package com.ruoyi.web.controller.common;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.List;
import java.util.Map;
@Component
public class JdbcSql {//JDBC 链接各个类型数据库
    private JdbcSql() {
    }

    //定义变量
    private static JdbcTemplate jdbcTemplate;
    @Autowired
    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        JdbcSql.jdbcTemplate = jdbcTemplate;
    }

    public static List<Map<String, Object>> GetDataSet(String SqlString) {
        return jdbcTemplate.queryForList(SqlString);
    }

    // 公有方法，获取数据，返回首行首列。
    public static String GetSHSL(String SqlString) {
        System.out.println("GetSHSL: ." + SqlString);
        List<Map<String, Object>> result = jdbcTemplate.queryForList(SqlString);
        if (result.isEmpty()) return "";
        String rs=result.get(0).values().toString();
        System.out.println("GetSHSL: ." +rs);//[1178]
        return rs.substring(1,rs.length()-1);
    }
    //返回一个用 | 分隔的字符串
    public static String GetStringList(String SqlString)
    {
        String ReturnStr = "",Key1="";
        List<Map<String, Object>> MyDT = GetDataSet(SqlString);
        if (MyDT == null)
        {
            return ReturnStr;
        }
        for (int i = 0; i < MyDT.size(); i++)
        {
            for (String key : MyDT.get(0).keySet()) {Key1=key;break; }
            if (!ReturnStr.equals(""))
            {
                ReturnStr = ReturnStr + "," + MyDT.get(i).get(Key1).toString();
            }
            else
            {
                ReturnStr = MyDT.get(i).get(Key1).toString();
            }
        }
        return ReturnStr;
    }
    // 公有方法，获取数据，返回一个DataRow。
    public static Map<String, Object> GetDbRow(String SqlString) {
        List<Map<String, Object>> result = jdbcTemplate.queryForList(SqlString);
        if (result.isEmpty()) return null;
        return result.get(0);
    }

    // 公有方法，执行Sql语句。对Update、Insert、Delete为影响到的行数，其他情况为-1
    public static void ExecuteSQL(String SqlString) {
        Common.WriteXYGLogInFile(SqlString);
        jdbcTemplate.execute(SqlString);
    }

    // 执行一条计算查询结果语句，返回查询结果（object）。
    public static int GetSingle(String SQLString,String Act) {//插入专用,获取id回来
        //ResultSet rs;
        // jdbcTemplate.query(SQLString,rs);
        Common.WriteXYGLogInFile(SQLString);
        int rows = jdbcTemplate.update(SQLString);
        if(rows<=0) return 0;
        if(Act.equals("add"))  return Integer.parseInt( GetSHSL("select LAST_INSERT_ID()"));
        return rows;
    }
    public static int Exec1SqlBatch(String sql) {
        String[] SQLString=sql.split(";");
        int[] ii=jdbcTemplate.batchUpdate(SQLString);
        return  ii[ii.length-1];
    }
    public static int ExecBatch(String[] SQLString) {
        //ResultSet rs;
        // jdbcTemplate.query(SQLString,rs);
        //Common.WriteXYGLogInFile(SQLString);
        int[] ii=jdbcTemplate.batchUpdate(SQLString);
        return  ii[ii.length-1];
    }
}